using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Raster._MosaicDataset
{
    /// <summary>
    /// <para>Export Mosaic Dataset Geometry</para>
    /// <para>Creates a feature class showing the footprints, boundary, seamlines or spatial resolutions of a mosaic dataset.</para>
    /// <para>创建显示镶嵌数据集的封装、边界、接缝线或空间分辨率的要素类。</para>
    /// </summary>    
    [DisplayName("Export Mosaic Dataset Geometry")]
    public class ExportMosaicDatasetGeometry : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ExportMosaicDatasetGeometry()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_mosaic_dataset">
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset that you want to export the geometry from.</para>
        /// <para>要从中导出几何图形的镶嵌数据集。</para>
        /// </param>
        /// <param name="_out_feature_class">
        /// <para>Output Feature Class</para>
        /// <para>Name the feature class you are creating.</para>
        /// <para>为要创建的要素类命名。</para>
        /// </param>
        public ExportMosaicDatasetGeometry(object _in_mosaic_dataset, object _out_feature_class)
        {
            this._in_mosaic_dataset = _in_mosaic_dataset;
            this._out_feature_class = _out_feature_class;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Export Mosaic Dataset Geometry";

        public override string CallName => "management.ExportMosaicDatasetGeometry";

        public override List<string> AcceptEnvironments => ["scratchWorkspace", "workspace"];

        public override object[] ParameterInfo => [_in_mosaic_dataset, _out_feature_class, _where_clause, _geometry_type.GetGPValue()];

        /// <summary>
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset that you want to export the geometry from.</para>
        /// <para>要从中导出几何图形的镶嵌数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_mosaic_dataset { get; set; }


        /// <summary>
        /// <para>Output Feature Class</para>
        /// <para>Name the feature class you are creating.</para>
        /// <para>为要创建的要素类命名。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_feature_class { get; set; }


        /// <summary>
        /// <para>Query Definition</para>
        /// <para>An SQL expression to export specific rasters in the mosaic dataset.</para>
        /// <para>用于导出镶嵌数据集中特定栅格的 SQL 表达式。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Query Definition")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _where_clause { get; set; } = null;


        /// <summary>
        /// <para>Geometry Type</para>
        /// <para><xdoc>
        ///   <para>The type of geometry to export.</para>
        ///   <bulletList>
        ///     <bullet_item>Footprint— Create a feature class showing the footprints of each image.</bullet_item><para/>
        ///     <bullet_item>Boundary— Create a feature class showing the boundary of the mosaic dataset.</bullet_item><para/>
        ///     <bullet_item>Seamline— Create a feature class showing the seamlines.</bullet_item><para/>
        ///     <bullet_item>Cell size level— Create a feature class based on cell size level of features in your mosaic dataset.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要导出的几何图形类型。</para>
        ///   <bulletList>
        ///     <bullet_item>封装 - 创建显示每个影像的封装的要素类。</bullet_item><para/>
        ///     <bullet_item>边界 - 创建显示镶嵌数据集边界的要素类。</bullet_item><para/>
        ///     <bullet_item>接缝线 - 创建显示接缝线的要素类。</bullet_item><para/>
        ///     <bullet_item>像元大小级别 - 根据镶嵌数据集中要素的像元大小级别创建要素类。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Geometry Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _geometry_type_value _geometry_type { get; set; } = _geometry_type_value._FOOTPRINT;

        public enum _geometry_type_value
        {
            /// <summary>
            /// <para>Footprint</para>
            /// <para>Footprint— Create a feature class showing the footprints of each image.</para>
            /// <para>封装 - 创建显示每个影像的封装的要素类。</para>
            /// </summary>
            [Description("Footprint")]
            [GPEnumValue("FOOTPRINT")]
            _FOOTPRINT,

            /// <summary>
            /// <para>Boundary</para>
            /// <para>Boundary— Create a feature class showing the boundary of the mosaic dataset.</para>
            /// <para>边界 - 创建显示镶嵌数据集边界的要素类。</para>
            /// </summary>
            [Description("Boundary")]
            [GPEnumValue("BOUNDARY")]
            _BOUNDARY,

            /// <summary>
            /// <para>Seamline</para>
            /// <para>Seamline— Create a feature class showing the seamlines.</para>
            /// <para>接缝线 - 创建显示接缝线的要素类。</para>
            /// </summary>
            [Description("Seamline")]
            [GPEnumValue("SEAMLINE")]
            _SEAMLINE,

            /// <summary>
            /// <para>Cell size level</para>
            /// <para>Cell size level— Create a feature class based on cell size level of features in your mosaic dataset.</para>
            /// <para>像元大小级别 - 根据镶嵌数据集中要素的像元大小级别创建要素类。</para>
            /// </summary>
            [Description("Cell size level")]
            [GPEnumValue("LEVEL")]
            _LEVEL,

        }

        public ExportMosaicDatasetGeometry SetEnv(object scratchWorkspace = null, object workspace = null)
        {
            base.SetEnv(scratchWorkspace: scratchWorkspace, workspace: workspace);
            return this;
        }

    }

}